﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CoreInmobiliario.Frontend
{
    public partial class Buscador : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CombosLoad();
                SetBusqueda(sender);
                Buscar();
            }
        }

        public void CombosLoad()
        {
            cmbTipoPropiedad.DataSource = Business.TipoPropiedad.GetInstance().GetList();
            cmbTipoPropiedad.DataBind();
            cmbTipoPropiedad.Items.Insert(0, new ListItem("INDISTINTO", "0"));
            cmbOperacion.DataSource = Business.Operacion.GetInstance().GetList();
            cmbOperacion.DataBind();
            cmbOperacion.Items.Insert(0, new ListItem("INDISTINTO", "0"));
            cmbProvincia.DataSource = Business.Provincia.GetInstance().GetProvinciasPublicaciones();
            cmbProvincia.DataBind();
            cmbProvincia.Items.Insert(0, new ListItem("INDISTINTO", "0"));
        }

        public void SetBusqueda(object sender)
        {
            if (Session[HelperClasses.Parameters.TIPO_PROPIEDAD] != null)
            {
                if(Session[HelperClasses.Parameters.TIPO_PROPIEDAD].ToString() == "0")
                    Session[HelperClasses.Parameters.TIPO_PROPIEDAD] = null;

                cmbTipoPropiedad.SelectedIndex = (Session[HelperClasses.Parameters.TIPO_PROPIEDAD] != null ? cmbTipoPropiedad.Items.IndexOf(cmbTipoPropiedad.Items.FindByValue(Session[HelperClasses.Parameters.TIPO_PROPIEDAD].ToString())) : 0);
                cmbOperacion.SelectedIndex = (Session[HelperClasses.Parameters.OPERACION] != null ? cmbOperacion.Items.IndexOf(cmbOperacion.Items.FindByValue(Session[HelperClasses.Parameters.OPERACION].ToString())) : 0);
                cmbProvincia.SelectedIndex = (Session[HelperClasses.Parameters.PROVINCIA] != null ? cmbProvincia.Items.IndexOf(cmbProvincia.Items.FindByValue(Session[HelperClasses.Parameters.PROVINCIA].ToString())) : 0);

                cmbProvincia_SelectedIndexChanged(sender, new EventArgs());

                cmbLocalidad.SelectedIndex = (Session[HelperClasses.Parameters.LOCALIDAD] != null ? cmbLocalidad.Items.IndexOf(cmbLocalidad.Items.FindByValue(Session[HelperClasses.Parameters.LOCALIDAD].ToString())) : 0);
                rbtnDolares.Checked = (Session[HelperClasses.Parameters.MONEDA] != null ? (Session[HelperClasses.Parameters.MONEDA].ToString() == HelperClasses.Utils.GetConfig("dolares") ? true : false) : false);
                txtDesde.Text = (Session[HelperClasses.Parameters.PRECIO_DESDE] != null ? Session[HelperClasses.Parameters.PRECIO_DESDE].ToString() : "");
                txtHasta.Text = (Session[HelperClasses.Parameters.PRECIO_HASTA] != null ? Session[HelperClasses.Parameters.PRECIO_HASTA].ToString() : "");

                btnBuscar_Click(sender, new EventArgs());

                Session.Remove(HelperClasses.Parameters.TIPO_PROPIEDAD);
                Session.Remove(HelperClasses.Parameters.OPERACION);
                Session.Remove(HelperClasses.Parameters.PROVINCIA);
                Session.Remove(HelperClasses.Parameters.LOCALIDAD);
                Session.Remove(HelperClasses.Parameters.MONEDA);
                Session.Remove(HelperClasses.Parameters.PRECIO_DESDE);
                Session.Remove(HelperClasses.Parameters.PRECIO_HASTA);
            }
        }

        protected void cmbProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            cmbLocalidad.DataSource = Business.Localidad.GetInstance().GetListLocalidadPublicacionByProvinciaId(Int32.Parse(cmbProvincia.SelectedValue));
            cmbLocalidad.DataBind();
            cmbLocalidad.Items.Insert(0, new ListItem("INDISTINTO", "0"));
        }

        public void Buscar()
        {
            int? tipoPropiedadId = null;
            if (cmbTipoPropiedad.SelectedValue != "0")
                tipoPropiedadId = Int32.Parse(cmbTipoPropiedad.SelectedValue);

            int? operacionId = null;
            if (cmbOperacion.SelectedValue != "0")
                operacionId = Int32.Parse(cmbOperacion.SelectedValue);

            int? localidadId = null;
            if (cmbLocalidad.SelectedValue != "0" & cmbLocalidad.Items.Count > 0)
                localidadId = Int32.Parse(cmbLocalidad.SelectedValue);

            int? monedaId = null;
            if (rbtnPesos.Checked)
                monedaId = 1;
            else if (rbtnDolares.Checked)
                monedaId = 2;

            int? precioDesde = 0;
            int? precioHasta = 999999999;
            try
            {

                if (txtDesde.Text != "")
                    precioDesde = Int32.Parse(txtDesde.Text);

                if (txtHasta.Text != "")
                    precioHasta = Int32.Parse(txtHasta.Text);
            }
            catch (Exception ex)
            {}

            gvPublicacion.DataSource = Business.Publicacion.GetInstance().GetPublicaciones(tipoPropiedadId, operacionId, localidadId, monedaId, precioDesde, precioHasta);
            gvPublicacion.DataBind();

            foreach (GridViewRow row in gvPublicacion.Rows)
            {
                Image imgPublicacion = row.FindControl("imgPublicacion") as Image;
                string propiedadId = gvPublicacion.DataKeys[row.RowIndex].Values[1].ToString();
                string publicacionId = gvPublicacion.DataKeys[row.RowIndex].Values[0].ToString();
                imgPublicacion.ImageUrl = GetImagenPortada(Int32.Parse(publicacionId));
            }
        }

        public void btnBuscar_Click(object sender, EventArgs e)
        {
            Buscar();
        }

        /// <summary>
        /// Si hay imagenes subidas, devuelve el path de la 1ra para visualizar como portada
        /// </summary>
        /// <returns></returns>
        public string GetImagenPortada(int publicacionId)
        {
            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetById(publicacionId);
            string[] filesImages = System.IO.Directory.GetFiles(MapPathSecure(HelperClasses.Utils.GetConfig(HelperClasses.Parameters.PROPIEDADES_PATH) + publicacion.PropiedadId.ToString() + "/"));

            if (filesImages.Length > 0)
            {
                filesImages[0] = filesImages[0].Replace("\\", "/");
                string[] subDirectory = filesImages[0].Split(char.Parse("/"));

                string pathImagePortada = HelperClasses.Utils.GetConfig(HelperClasses.Parameters.PROPIEDADES_PATH) + publicacion.PropiedadId.ToString() + "/" + subDirectory[subDirectory.Length - 1];

                return pathImagePortada.Substring(2);
            }
            else
                return "Images/Style/sin_foto.jpg";
        }

        protected void gvPublicacion_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvPublicacion.PageIndex = e.NewPageIndex;
            Buscar();
        }

        protected void btnPdf_Click(object sender, ImageClickEventArgs e)
        {
            ImageButton btnPdf = (ImageButton)sender;
            upPublicacion.Triggers.Add(new PostBackTrigger { ControlID = btnPdf.UniqueID });
            
            GridViewRow row = ((ImageButton)sender).Parent.Parent as GridViewRow;
            int publicacionId = Int32.Parse(gvPublicacion.DataKeys[row.RowIndex].Values[0].ToString());

            Data.Publicacion publicacion = Business.Publicacion.GetInstance().GetById(publicacionId);
            string path = Server.MapPath("PDF/" + publicacion.Codigo + "_(Nuevo Espacio).pdf");
            //Download PDF
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(path);
            this.Response.Clear();
            this.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
            this.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
            this.Response.ContentType = "application/octet-stream";
            this.Response.WriteFile(fileInfo.FullName);
            this.Response.End();
        }

        protected void btnImprimir_Click(object sender, ImageClickEventArgs e)
        {

        }

        protected void btnDetalles_Click(object sender, ImageClickEventArgs e)
        {
            GridViewRow row = ((ImageButton)sender).Parent.Parent as GridViewRow;
            int publicacionId = Int32.Parse(gvPublicacion.DataKeys[row.RowIndex].Values[0].ToString());
            Response.Redirect("Publicacion.aspx?id=" + publicacionId.ToString());
        }

    }
}